/*
 * Proyecto Manejador de Proyectos
 * @Autor Hector Hurtado
 */
package Mproyectos.controladores;

import Mproyectos.entidades.Programa;
import Mproyectos.modelo.FachadaPrograma;
import java.io.Serializable;
import java.util.Collection;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * Controla el CRUD del programa
 */
@ManagedBean(name = "controladorPrograma")
@SessionScoped
public class ControladorPrograma  implements Serializable {

    /**
     * Programa se esta creando o actualizando
     */
    private Programa programa;
    /**
     * Fachada de acceso a los datos
     */
    @EJB
    private FachadaPrograma fachadaPrograma;

    /**
     * Constructor vacio
     */
    public ControladorPrograma() {
    }

    /**
     * Devuelve el Programa en creacion o edicion
     *
     * @return Programa a crear o actualizar
     */
    public Programa getPrograma() {

        // Si el Programa esta vacio crear uno 
        if (programa == null) {
            programa = new Programa();
        }

        // Retorna el Programa actual
        return programa;
    }

    /**
     * Actualiza el Programa en edicion o creacion
     *
     * @param programa actual
     */
    public void setPrograma(Programa programa) {
        this.programa = programa;
    }

    /**
     * Devuelve todos los programas registrados en el sistema
     *
     * @return Lista de programas
     */
    public Collection<Programa> getProgramas() {
        return fachadaPrograma.listar();
    }

    /**
     * Adiciona a la unidad de persistencia el programa actual
     *
     * @return Nombre de la pagina despues de crear
     */
    public String crear() {
        // Adiciona el programa 
        fachadaPrograma.adicionar(getPrograma());
        programa=null;

        // Se va para la pagina de listar programas 
        return "listar";
    }

    /**
     * Elimina el programa especificado y retorna a la lista
     *
     * @param programa a eliminar
     * @return Pagina a la quer se devuelve
     */
    public String eliminar(Programa programa) {
        fachadaPrograma.eliminar(programa);
        return "listar";
    }

    /**
     * Asigna el programa especificado como el programa actual y llama a la
     * pagina de actualizar
     *
     * @param programa a actualizar
     * @return devuelve a la pagina de actualizacion
     */
    public String prepararActualizar(Programa programa) {
        // Asigna el programa seleccionado desde la lista como  el actual 
        this.programa = programa;
        return "actualizar";
    }

    /**
     * Actualiza los datos del programa actual
     *
     * @return devuelve a la lista
     */
    public String actualizar() {
        fachadaPrograma.actualizar(programa);
        return "listar";
    }

    /**
     * Retorna la fachada de programa
     *
     * @return Fachada de programa
     */
    public FachadaPrograma getFachadaPrograma() {
        return fachadaPrograma;
    }
}